/*

希尔排序:
也是一种插入排序,它通过设置一个间隔，对同样间隔的数的集合进行插入排序，此数集合中的元素移位的长度是以间隔的长度为准，这样就实现了大步位移。但是最后需要对元素集合进行一次直接插入排序，所以最后的间隔一定是1。但是这个间隔怎么确定，这是个数学难题，至今没有解答

 */


function shell_sort(array) {
    if (!array) return;
    var len = array.length;
    var gap = Math.floor(len / 2);
    while (gap > 0) {
        for (var i = gap; i < len; i++) {
            var idx = i;
            while (idx > 0) {
                if (array[idx - gap] > arr[idx]) {
                    var temp = array[idx];
                    array[idx] = array[idx - gap];
                    array[idx - gap] = temp;
                    idx -= gap;
                } else {
                    break;
                }
            }
        }
        gap = Math.floor(gap / 2);
    }
}




var arr = [32, 42, 1, 89, 23, 154, 79, 81, 66, 7];

shell_sort(arr);

console.log('shell sort:');
console.log(arr);